Make the Lisp reader and string-to-float more consistent.
authorPaul Eggert <eggert@cs.ucla.edu>
Wed, 20 Apr 2011 06:24:51 +0000 (23:24 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Wed, 20 Apr 2011 06:24:51 +0000 (23:24 -0700)
commit46e3401fc4a6621537fb0058804f6011f9f55fa4
tree0a9e0e924316a34196e058735b30834eeed9ff6d
parente52c8f3d4126225492e5448b6af49a6f6eb2a8e0
Make the Lisp reader and string-to-float more consistent.

* data.c (atof): Remove decl; no longer used or needed.
(Fstring_to_number): Use new string_to_float function, to be
consistent with how the Lisp reader treats infinities and NaNs.
Do not assume that floating-point numbers represent EMACS_INT
without losing information; this is not true on most 64-bit hosts.
Avoid double-rounding errors, by insisting on integers when
parsing non-base-10 numbers, as the documentation specifies.
Report integer overflow instead of silently converting to
integers.
* lisp.h (string_to_float): New decl, replacing ...
(isfloat_string): Remove.
* lread.c (read1): Do not accept +. and -. as integers; this
appears to have been a coding error.  Similarly, do not accept
strings like +-1e0 as floating point numbers.  Do not report
overflow for some integer overflows and not others; instead,
report them all.  Break out the floating-point parsing into a new
function string_to_float, so that Fstring_to_number parses
floating point numbers consistently with the Lisp reader.
(string_to_float): New function, replacing isfloat_string.
This function checks for valid syntax and produces the resulting
Lisp float number too.
src/ChangeLog
src/data.c
src/lisp.h
src/lread.c